<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      const swap = (array, a, b) => {
        const temp = array[a];
        array[a] = array[b];
        array[b] = temp;
      };

      /* 
      选择排序算法是一种原址比较排序算法。
      选择排序大致的思路是找到数据结构中的最小值并 将其放置在第一位，
      接着找到第二小的值并将其放在第二位，以此类推。
      */

      function selectionSort(array) {
        const { length } = array;

        // 标记点 最小值的index
        let indexMin;
        // 终止循环的条件为什么是length -1
        // 原因: 遍历到最后一项时, 最后这项一定是比前面都要小 他就是最小值  所以可以节省一次遍历
        for (let i = 0; i < length - 1; i++) {
          indexMin = i; // 先使用标记点
          // 第二次遍历 开始从第i项
          // 原因 前面i项已经排列好 从小到大
          for (let j = i; j < length; j++) {
            // 判断条件 找出最小项 替换索引
            if (array[indexMin] > array[j]) {
              indexMin = j;
            }
          }
          // 为了节省性能 判断i和indexMin是不是一个 如果不是 才进行交换
          if (i !== indexMin) {
            swap(array, indexMin, i); // 交换值 i 和 indexMin
          }
        }
        console.log(array);
      }

      selectionSort([1, 3, 43, 2, 34, 56]);
    </script>
  </body>
</html>
